iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
Software Development

30天收斂後端開發心法系列 第 29

30天收斂後端開發心法 - (29) K8S

  • 分享至 

  • xImage
  •  

在這篇文章中,我不會完整介紹 K8S 的所有功能,而是聚焦在它如何 接收請求、處理請求,以及 管理應用程式。

1. K8S 如何分辨請求?

在 Kubernetes 中,請求會透過 Service 進入叢集,並由 DNS 系統轉換成對應的 IP 與 Port。
這樣的設計讓我們不用直接記 IP,而是可以用服務名稱(如 my-app-service)呼叫。
例如:

請求送到 http://my-app-service → 由 K8S 的 kube-dns/CoreDNS 轉換成 Pod 的 IP → 轉發給應用程式處理。

以 PHP 應用程式為例:請求會被導向到 php-fpm 容器中,最終由 PHP 程式處理。

2. K8S 如何做到自動化部署?

K8S 採用 YAML 檔 來描述應用程式的狀態,例如要啟動多少 Pod、要用哪個容器 Image、如何對外開放服務等。
由於 YAML 是純文字檔,我們可以:

在公司自建的伺服器使用

也能直接在公有雲(如 GCP、AWS、Azure)上部署

這樣的描述方式讓 部署自動化、可移植性高,而且方便透過 Git 版本控制進行基礎設施即程式碼。

3. K8S 如何控制流量?

K8S 的 Service 內建 Load Balancing,能自動將流量分配到多個 Pod,達到負載平衡。
此外,K8S 也支援 自動水平擴展(Horizontal Pod Autoscaler, HPA):

當流量上升時,自動啟動更多 Pod 分攤請求

當流量下降時,自動縮減 Pod 數量,減少資源浪費

這讓系統能更有效率地運用資源,特別是當專案多、服務多時,能明顯降低資源消耗。

4. 如果 Pod 掛了怎麼辦?

K8S 具備 自我修復機制(Self-healing)。
它會定期透過 探針(Probes:Liveness Probe、Readiness Probe) 檢查 Pod 是否存活:

如果 Pod 沒有回應,K8S 會自動刪除並重新建立新的 Pod

即使是人工刪除 Pod,K8S 也會依照 Deployment/ReplicaSet 的設定自動補足 Pod 數量

因此,應用程式能夠長時間維持在「期望狀態」。

5. K8S 之於容器

K8S 就像是容器世界的 作業系統。
除了讓應用程式穩定運行之外,我們也可以用它來 排程工作。
例如:可以透過 CronJob 資源 定期執行 Laravel 的排程指令:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: laravel-scheduler
spec:
  schedule: "*/5 * * * *" # 每 5 分鐘執行一次
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: artisan-schedule
            image: my-laravel-app:latest
            command: ["php", "artisan", "schedule:run"]
          restartPolicy: OnFailure

這樣就能完全自動化地管理定期任務。

總結

K8S 透過 Service、DNS、探針與自動化機制,實現了:

  • 自動分配請求與流量

  • 自動部署與跨平台管理

  • 自我修復與資源最佳化

如果想更深入了解,建議參考 Kubernetes 官方文件,能學到更多細節。


上一篇
30天收斂後端開發心法 - (28) Docker Compose
下一篇
30天收斂後端開發心法 - (30) 完賽心得
系列文
30天收斂後端開發心法30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言